﻿using System;
using System.Data;
using SiGeCoPre.Presupuesto_DAO;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Entities;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Excepcion;
using SiGeCoPre.Presupuesto_Util;

namespace SiGeCoPre.Presupuesto_BLIMPL
{
    ///<sumary>
    ///Clase que implementa BLSectores
    ///</sumary>

    class BLIMPLSectores:Presupuesto_BL.BLSectores
    {
        DAOSectores createSector = DAOFactoryPresupuesto.createSector();

        /// <summary>
        /// Guarda un sector
        /// </summary>
        /// <param name="s">Objeto con los datos del sector a guardar</param>
        /// <returns>Devuelve true si fue ingresado correctamente o false si falló</returns>
        public bool saveSector(sectoresDTO s)
        {
            Boolean correcto = false;

            try
            {
                Boolean insertado = createSector.saveSector(s.Nombre, s.Activo);

                if (insertado)
                {
                    correcto = true;    
                }
                
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Modifica un sector
        /// </summary>
        /// <param name="s">Objeto con los datos del sector a modificar</param>
        /// <param name="nombre">Determina que sector va a ser modificado</param>
        /// <returns>Devuelve true si fue modificado correctamente o false si falló</returns>
        public bool updateSector(sectoresDTO s, string nombre)
        {
            Boolean correcto = false;

            try
            {
                sectores sec = createSector.getSector(nombre);

                if (null != sec)
                {
                    Boolean modificado = createSector.updateSector(s.Nombre, s.Activo, sec.ID);

                    if (modificado)
                    {
                        correcto = true;     
                    }
                       
                }
                
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Elimina un sector
        /// </summary>
        /// <param name="nombre">Determina que sector va a ser eliminado</param>
        /// <returns>Devuelve true si fue eliminado correctamente o false si falló</returns>
        public bool deleteSector(string nombre)
        {
            Boolean correcto = false;

            try
            {
                Boolean eliminado = createSector.deleteSector(nombre);

                if (eliminado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Lista todos los sectores
        /// </summary>
        /// <returns>Devuelve una tabla con todos los sectores</returns>
        public DataTable getAllSector()
        {
            DataTable listadoSectores = null;

            try
            {
                DataTable sectores = createSector.getAllSector();
                if (null != sectores)
                {
                    listadoSectores = sectores;
                }
               
                
            }
            catch (Exception ex)
            {

                listadoSectores = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return listadoSectores;
        }

        /// <summary>
        /// Obtiene un sector
        /// </summary>
        /// <param name="nombre">Determina el sector a obtener</param>
        /// <returns>Devuelve un objeto sector</returns>
        public sectoresDTO getSector(string nombre)
        {
            sectoresDTO sec = null;

            try
            {
                sectores sector = createSector.getSector(nombre);

                if (null != sector)
                {
                    sec = new sectoresDTO();
                    sec.Activo = sector.Activo;
                    sec.ID = sector.ID;
                    sec.Nombre = sector.Nombre;
                }
               

            }
            catch (Exception ex)
            {

                sec = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return sec;
        }
    }
}
